package web.suzy.oj.service.oj;

import web.suzy.oj.common.result.ResultBean;
import web.suzy.oj.pojo.dto.ApplyResetPasswordDTO;
import web.suzy.oj.pojo.dto.LoginDTO;
import web.suzy.oj.pojo.dto.RegisterDTO;
import web.suzy.oj.pojo.dto.ResetPasswordDTO;
import web.suzy.oj.pojo.vo.RegisterCodeVO;
import web.suzy.oj.pojo.vo.UserInfoVO;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * YangSuzy 软件工作室
 * 类名: PassportService
 * 描述: 用户通行证Service层服务
 * 功能: 处理用户登录登出、注册、修改密码方法
 * ========未完成=========
 *
 * @author YangSuzy
 * Date: 2022/11/9 14:35
 */
public interface PassportService {
    /**
     * 方法名: login
     * 描述: 用户登录方法
     *
     * @param loginDto 登录数据实体类
     * @param response 响应
     * @param request  请求
     * @return web.suzy.oj.common.result.ResultBean<web.suzy.oj.pojo.vo.UserInfoVO>
     * @date 2022/11/9 14:43
     * @auther YangSuzy
     **/
    ResultBean<UserInfoVO> login(LoginDTO loginDto, HttpServletResponse response, HttpServletRequest request);

    /**
     * 方法名: getRegisterCode
     * 描述: 向注册用户发送注册验证码
     *
     * @param email 注册用户邮箱
     * @return web.suzy.oj.common.result.ResultBean<web.suzy.oj.pojo.vo.RegisterCodeVO>
     * @date 2022/11/14 12:01
     * @auther YangSuzy
     **/
    ResultBean<RegisterCodeVO> getRegisterCode(String email);

    /**
     * 方法名: register
     * 描述: 用户注册方法
     *
     * @param registerDto 注册用户数据传输对象
     * @return web.suzy.oj.common.result.ResultBean<java.lang.Void>
     * @date 2022/11/9 22:29
     * @auther YangSuzy
     **/
    ResultBean<Void> register(RegisterDTO registerDto);

    /**
     * 方法名: applyResetPassword
     * 描述: 通过邮件发送重置密码链接
     *
     * @param applyResetPasswordDto
     * @return web.suzy.oj.common.result.ResultBean<java.lang.Void>
     * @date 2022/11/14 13:06
     * @auther YangSuzy
     **/
    ResultBean<Void> applyResetPassword(ApplyResetPasswordDTO applyResetPasswordDto);

    /**
     * 方法名: resetPassword
     * 描述: 密码重置方法
     *
     * @param resetPasswordDto 密码重置数据传输对象
     * @return web.suzy.oj.common.result.ResultBean<java.lang.Void>
     * @date 2022/11/9 22:31
     * @auther YangSuzy
     **/
    ResultBean<Void> resetPassword(ResetPasswordDTO resetPasswordDto);

    /**
     * 方法名: logout
     * 描述: 用户登出，将用户凭证从redis中删除
     *
     * @return web.suzy.oj.common.result.ResultBean<java.lang.Void>
     * @date 2022/11/15 12:49
     * @auther YangSuzy
     **/
    ResultBean<Void> logout();
}
